package com.ys.utils.yinsheng.yztdock.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import java.util.UUID;

/**
 * MD5加密工具
 * 
 * @author 贺亮
 * 
 */
public class MD5Helper {

    // 全局数组
    private static final String[] STRDIGITS = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "j",
            "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W",
            "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
            "k", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w",
            "x", "y", "z"};
    
    public static String createUUID() {
        UUID id = UUID.randomUUID();
        return id.toString().replace("-", "");
    }

    /**
     * 生成一个num位的随机整数
     */
    public static String getPassword(Integer num) {
        String str = "";
        for (int i = 0; i < num; i++) {
            str += new Random().nextInt(9);
        }
        return str;
    }
    
    /**
     * 生成一个num位的随机字符串
     */
    public static String getRandonStr(Integer num) {
        String str = "";
        for (int i = 0; i < num; i++) {
            str += STRDIGITS[new Random().nextInt(STRDIGITS.length)];
        }
        return str;
    }

    /**
     * 生成一个4位的随机整数
     */
    public static Integer getSafeKey() {
        Random random = new Random();
        Integer r = random.nextInt(9999);
        if (r < 1000) {
            r = r + 1000;
        }
        return r;
    }
    
    /**
     * 生成一个4位的随机整数
     */
    public static Integer getVerifyKey() {
        Random random = new Random();
        Integer r = random.nextInt(999999);
        if (r < 100000) {
            r = r + 100000;
        }
        return r;
    }

    /**
     * 密码加密
     * 
     * @param str
     *            密码
     * @return 返回加密字符
     */
    public static String encryption(String str) {
        if(ObjectHelper.isEmpty(str)){
            return str;
        }
        MessageDigest md = null;
        String outStr = null;
        try {
            md = MessageDigest.getInstance("MD5");
            // md.digest() 该函数返回值为存放哈希值结果的byte数组
            outStr = byteToString(md.digest(str.getBytes("UTF-8")));
        } catch (NoSuchAlgorithmException nsae) {
            nsae.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return outStr;
    }

    /**
     * 解密！其实是对字符加密后 和原来的匹配
     * 
     * @param o
     *            已有密码
     * @param i
     *            认证密码
     * @return 返回密码是否匹配
     */
    public static Boolean decryption(String o, String i) {
        if (o.equals(encryption(i))) {
            return true;
        }
        return false;
    }


    // 返回形式为数字跟字符串
    private static String byteToArrayString(byte bByte) {
        int iRet = bByte;
        // System.out.println("iRet="+iRet);
        if (iRet < 0) {
            iRet += 256;
        }
        int iD1 = iRet / 16;
        int iD2 = iRet % 16;
        return STRDIGITS[iD1] + STRDIGITS[iD2];
    }

    // 转换字节数组为16进制字串
    private static String byteToString(byte[] bByte) {
        StringBuffer sBuffer = new StringBuffer();
        for (int i = 0; i < bByte.length; i++) {
            sBuffer.append(byteToArrayString(bByte[i]));
        }
        return sBuffer.toString();
    }
    

}
